home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Grafik / AmiCAD / ARexx_english / grid.AmiCAD < prev    next >
Text File  |  1998-06-17  |  4KB  |  184 lines

  1. /* Creates a grid in the current window.
  2. $VER: 1.01e (© R.Florac, 24 Mai 1998) */
  3.  
  4. options results     /* indispensable pour récupérer le résultat des macros */
  5.  
  6. signal on error     /* pour l'interception des erreurs */
  7. signal on syntax
  8.  
  9. 'WWIDTH(-1)'; lt = result
  10. 'WHEIGHT(-1)'; ht=result
  11. clip=-1
  12. FIRSTSEL; obj=result
  13. if obj>0 then do
  14.     'TYPE(FIRSTSEL)'; type=result
  15.     if type=22 then do
  16.     'CLIPUNIT(5)'; clip=result
  17.     'COORDS(FIRSTSEL)'; coords=result
  18.     PARSE VAR coords x0 ',' y0 ',' x1 ',' y1
  19.     xg=minima(x0,x1); xd=maxima(x0,x1)
  20.     yh=minima(y0,y1); yb=maxima(y0,y1)
  21.     l=xd-x0+1; h=yb-y0+1
  22.     'NEXTSEL('obj')'; obj=result
  23.     end
  24. end
  25. else obj=1
  26.  
  27. if obj>0 then do
  28.     'MESSAGE("Draw and select a"+CHR(10)+"box, the grid will"+CHR(10)+"be included in it.")'
  29.     call quitter
  30. end
  31.  
  32. 'ASK("Horizontal axis"+CHR(10)+"Number of decades?")'
  33. ndh = result
  34. if ndh<=0 then call quitter
  35. 'SELECT("Scale type"+CHR(10)+"1- Linear"+CHR(10)+"2- Logarithm"+CHR(10)+"3- Antilog")'
  36. tt=result
  37. y1=y0+h
  38. x1=x0+ndh*(l%ndh)
  39.  
  40. 'SAVEALL(-1)'
  41. if clip>=0 then 'MENU("Cut")'
  42. /* Vertical lines */
  43. select
  44.     when tt=1 then do
  45.     /* Tracé des lignes verticales */
  46.     do i=1 to ndh
  47.         x2 = (x0)+i*(l/ndh)
  48.         x2 = x2%1
  49.         'DRAWMODE(1)'
  50.         do c=1 to 9
  51.         xc = x2-(l/ndh)/10*c
  52.         xc=xc%1
  53.         'DRAW('xc','y0','xc','y1')'
  54.         end
  55.         'DRAWMODE(2):DRAW('x2','y1','x2','y0')'
  56.     end
  57.     end
  58.     when tt=2 then do
  59.     if ~show('L','rexxmathlib.library') then
  60.        call addlib('rexxmathlib.library',0,-30)
  61.     /* Tracé des lignes verticales */
  62.     x2=x0
  63.     do i=1 to ndh
  64.         'DRAWMODE(1)'
  65.         do c=2 to 9
  66.         xc=(l/ndh)*log10(c)
  67.         xc=(x2+xc)%1
  68.         'DRAW('xc','y0','xc','y1')'
  69.         end
  70.         x2 = (x0)+i*(l/ndh)
  71.         x2 = x2%1
  72.         'DRAWMODE(2):DRAW('x2','y1','x2','y0')'
  73.     end
  74.     end
  75.     when tt=3 then do
  76.     if ~show('L','rexxmathlib.library') then
  77.        call addlib('rexxmathlib.library',0,-30)
  78.     x2=x1
  79.     do i=1 to ndh
  80.         'DRAWMODE(2):DRAW('x2','y1','x2','y0')'
  81.         'DRAWMODE(1)'
  82.         do c=2 to 9
  83.         xc=(l/ndh)*log10(c)
  84.         xc=(x2-xc)%1
  85.         'DRAW('xc','y0','xc','y1')'
  86.         end
  87.         x2 = (x1)-i*(l/ndh)
  88.         x2 = x2%1
  89.     end
  90.     end
  91.     otherwise call quitter
  92. end
  93.  
  94. 'ASK("Vertical axis"+CHR(10)+"Number of decades?")'
  95. ndv = result
  96. if ndv<=0 then call quitter
  97.  
  98. y1=y0+h
  99. x1=x0+ndh*(l%ndh)
  100. /* Drawing borders */
  101. 'DRAWMODE(2):DRAW('x0','y0','x1','y0'):DRAW('x0','y1','x0','y0')'
  102.  
  103. 'SELECT("Scale type"+CHR(10)+"1- Linear"+CHR(10)+"2- Logarithm"+CHR(10)+"3- Antilog")'
  104. tt=result
  105.  
  106. /* Horizontal lines */
  107. select
  108.     when tt=1 then do
  109.     do i=1 to ndv
  110.         y2 = (y0)+i*(h/ndv)
  111.         y2 = y2%1
  112.         'DRAWMODE(1)'
  113.         do c=1 to 9
  114.         yc = y2-(h/ndv)/10*c
  115.         yc=yc%1
  116.         'DRAW('x0','yc','x1','yc')'
  117.         end
  118.         'DRAWMODE(2):DRAW('x0','y2','x1','y2')'
  119.     end
  120.     end
  121.     when tt=2 then do
  122.     if ~show('L','rexxmathlib.library') then
  123.        call addlib('rexxmathlib.library',0,-30)
  124.     y2=y1
  125.     do i=1 to ndv
  126.         'DRAWMODE(2):DRAW('x0','y2','x1','y2')'
  127.         'DRAWMODE(1)'
  128.         do c=2 to 9
  129.         yc=(h/ndv)*log10(c)
  130.         yc=(y2-yc)%1
  131.         'DRAW('x0','yc','x1','yc')'
  132.         end
  133.         y2 = y1-i*(h/ndv)
  134.         y2 = y2%1
  135.     end
  136.     end
  137.     when tt=3 then do
  138.     if ~show('L','rexxmathlib.library') then
  139.        call addlib('rexxmathlib.library',0,-30)
  140.  
  141.     y2=y0
  142.  
  143.     do i=1 to ndv
  144.         'DRAWMODE(1)'
  145.         do c=2 to 9
  146.         yc=(h/ndv)*log10(c)
  147.         yc=(y2+yc)%1
  148.         'DRAW('x0','yc','x1','yc')'
  149.         end
  150.         y2 = (y0)+i*(h/ndv)
  151.         y2 = y2%1
  152.         'DRAWMODE(2):DRAW('x0','y2','x1','y2')'
  153.     end
  154.     end
  155.     otherwise call quitter
  156. end
  157. call quitter
  158.  
  159. minima: procedure
  160.     parse arg v1,v2
  161.     if v1<v2 then return v1
  162.     return v2
  163. end
  164.  
  165. maxima: procedure
  166.     parse arg v1,v2
  167.     if v1>v2 then return v1
  168.     return v2
  169. end
  170.  
  171. quitter: procedure expose clip
  172.     if clip>=0 then 'CLIPUNIT('clip')'
  173.     exit
  174.  
  175. /* Traitement des erreurs, interruption du programme */
  176. syntax:
  177. erreur=RC
  178. 'MESSAGE("Script grid.AmiCAD"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  179. exit
  180.  
  181. error:
  182. 'MESSAGE("Script grid.AmiCAD"+CHR(10)+"Error in line 'SIGL'")'
  183. call quitter
  184.